class Solution {
private:
    int dp[1001][1001];
public:
    int longestCommonSubsequence(string text1, string text2) {
        int m = text1.length(), n = text2.length();
        dp[0][0] = ((text1[0] == text2[0]) ? 1 : 0);
        for(int i = 1; i < n; i++){
            if(text1[0] == text2[i])dp[0][i] = 1;
            else dp[0][i] = dp[0][i - 1];
        }
        for(int i = 1; i < m; i++){
            if(text1[i] == text2[0])dp[i][0] = 1;
            else dp[i][0] = dp[i - 1][0];
        }
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                if(text1[i] == text2[j])dp[i][j] = dp[i - 1][j - 1] + 1;
                else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
            }
        }
        return dp[m - 1][n - 1];
    }
};

//2021.4.3 
